// 开闭原则 OCP - open closed principle
// 目标：已有的场景下，对于需要拓展的功能进行开放，拒绝直接的功能修改

// sprint1 - 元旦活动，游戏wukong高亮 + LOL要弹出折扣
// render
if (game === 'wukong') {
    // 高亮
} else {
    // ...
}

// dialog
if (game === 'LOL') {
    // 弹出折扣
} else {
    // ...
}

// 重构 => 分配原则
// render
gameManager(game).setColor()

// dialog
gameManager(game).openDialog()

// center
function gameManager(game) {
    return `${game}Manager`
}

// 开放
const LOLManager = {
    setColor() {
        //..
    },
    openDialog() {
        // 弹出折扣
    }
}

const wukongManager = {
    setColor() {
        //高亮
    },
    openDialog() {
        //..
    }
}

// 重构2
class Game {
    constructor(name) {
        this.name = name
    }
    setColor() {}
    openDialog() {}
}


class LOL extends Game {
    openDialog() {
        // 弹出折扣
    }
}

class wukong extends Game {
    setColor() {
        // 高亮
    }
}
